/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.domain.proceso.envio.carga;

import com.model.dao.mapping.Enaho;
import com.model.domain.proceso.envio.subida.LogXmlTransferido;
import util.file.xml.RegistroXml;
import com.model.domain.proceso.envio.subida.xml.RegistroXmlHogar;
import com.model.domain.ubicacion.ViviendaXmlTransferido;
import java.util.Date;

/**
 *
 * @author Rdelacruz
 */
public class LogXmlCargado {
    private Integer id;
    private LogXmlTransferido logXmlTransferido;
    private Date fechaCarga;
    
    private ProcesoCarga procesoCarga;//aqui esta el TipoCarga
    
            
    //private ConjuntoReglasEnvioHogar reglas;
    
    private ViviendaXmlTransferido viviendaParaCargar; 
    
    private ConjuntoControlesEnvioHogar hogaresParaCargar;
    
    
    public boolean sePuedeCargarRegistro(RegistroXml registroXml) throws Exception {        
        if(registroXml instanceof RegistroXmlHogar) { 
            RegistroXmlHogar regXml = (RegistroXmlHogar) registroXml;
                        
            ControlEnvioHogar controlHogar = hogaresParaCargar.getControlHogarPara(regXml);
            if(controlHogar!=null) {
                if(procesoCarga.isConControlEnvioHogar()) {                
                    return controlHogar.getReglaEnvioHogar().puedeCargar();
                }
                else {
                    return true;
                }
            }
            return false;
        }
        //else if(registroXml instanceof ViviendaXml) {            
        //}        
        return true;
    }
    
    public void registrarResultado(RegistroXml regXml, EstadoCarga estadoCarga) {
        String nombreTabla = regXml.getTabla().getNombre();
        
        if(hogaresParaCargar!=null && (regXml instanceof RegistroXmlHogar)) {
            int establecerResultadoCargaEnHogar = 0;
            if(nombreTabla.equals(Enaho.HOGAR.getTabla())) {
                establecerResultadoCargaEnHogar = 1;                
            }
            else {
                if(estadoCarga==EstadoCarga.CARGADO_CON_ERROR) {
                    establecerResultadoCargaEnHogar = 2;
                }
            }
            
            if(establecerResultadoCargaEnHogar>0) {
                RegistroXmlHogar reg = (RegistroXmlHogar) regXml;
                ControlEnvioHogar hogarParaCargar = hogaresParaCargar.getControlHogarPara(reg);
                if(hogarParaCargar!=null) {
                    if(establecerResultadoCargaEnHogar==1) {
                        hogarParaCargar.setEstado(estadoCarga);
                    }
                    else if(establecerResultadoCargaEnHogar==2) {
                        if(hogarParaCargar.getEstado()!=EstadoCarga.CARGADO_CON_ERROR)
                            hogarParaCargar.setEstado(estadoCarga);
                    }
                }
            }            
        }
        else if(nombreTabla.equals(Enaho.VIVIENDA.getTabla())) {
            viviendaParaCargar = new ViviendaXmlTransferido();
            viviendaParaCargar.setResultadoUltimaCarga(estadoCarga);
        }
    }

    public LogXmlTransferido getLogXmlTransferido() {
        return logXmlTransferido;
    }

    public void setLogXmlTransferido(LogXmlTransferido logXmlTransferido) {
        this.logXmlTransferido = logXmlTransferido;
    }
  

    public Date getFechaCarga() {
        return fechaCarga;
    }

    public void setFechaCarga(Date fechaCarga) {
        this.fechaCarga = fechaCarga;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public ProcesoCarga getProcesoCarga() {
        return procesoCarga;
    }

    public void setProcesoCarga(ProcesoCarga procesoCarga) {
        this.procesoCarga = procesoCarga;
    }

    public ViviendaXmlTransferido getViviendaParaCargar() {
        return viviendaParaCargar;
    }

    public void setViviendaParaCargar(ViviendaXmlTransferido viviendaParaCargar) {
        this.viviendaParaCargar = viviendaParaCargar;
    }

    public ConjuntoControlesEnvioHogar getHogaresParaCargar() {
        return hogaresParaCargar;
    }

    public void setHogaresParaCargar(ConjuntoControlesEnvioHogar hogaresParaCargar) {
        this.hogaresParaCargar = hogaresParaCargar;
    }


   

      

    
    
}
